iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
Software Development

30天快速打造Python資料結構&演算法邏輯刷爆LeetCode系列 第 13

DAY 13 「圖形搜索演算法(Graph Traversal Algorithms)」DFS & BFS 傻傻分不清楚的Python程式碼撰寫~

  • 分享至 

  • xImage
  •  

想像圖上面有好多個「點」要如何找到特定點呢?那就是「邊」~

/images/emoticon/emoticon06.gif白話說DFS&BFS這兩種算法主要解決迷宮問題、路徑搜索等方面具有廣泛的應用~
圖形搜索演算法是用於在圖形(Graph)中尋找特定節點或遍歷整個圖形的算法。圖形是由節點(或稱為頂點)和之間的邊組成的數學結構

def dfs(graph, start, visited=None):
    if visited is None:
        visited = set()
    visited.add(start)
    print(start, end=' ')
    for neighbor in graph[start] - visited:
        dfs(graph, neighbor, visited)
    return visited

# Example usage
graph = {'A': {'B', 'C'},
         'B': {'A', 'D', 'E'},
         'C': {'A', 'F'},
         'D': {'B'},
         'E': {'B', 'F'},
         'F': {'C', 'E'}}
dfs(graph, 'A')
  • 廣度優先搜索(Breadth-First Search, BFS):

基本思想是從起始節點開始,依次探索與起始節點距離為 1、2、3... 的節點,直到找到目標節點或所有節點都被探索完為止。使用佇列(Queue)來實現 DAY 3 「陣列(Array)、連結串列(Linked List) VS. 堆疊(Stack)、佇列(Queue)」還有Python資料結構傻傻分不清楚?

from collections import deque

def bfs(graph, start):
    visited = set()
    queue = deque([start])
    visited.add(start)
    while queue:
        vertex = queue.popleft()
        print(vertex, end=' ')
        for neighbor in graph[vertex]:
            if neighbor not in visited:
                queue.append(neighbor)
                visited.add(neighbor)

# 使用示例
graph = {'A': ['B', 'C'],
         'B': ['A', 'D', 'E'],
         'C': ['A', 'F'],
         'D': ['B'],
         'E': ['B', 'F'],
         'F': ['C', 'E']}

bfs(graph, 'A')

上一篇
DAY 12 「線性搜尋(Linear Search)」簡單直觀的Python搜索程式碼撰寫~
下一篇
DAY 14 「圖形最短路徑演算法 (Shortest Path Algorithms)」重要地位的地圖來源Python程式碼撰寫~
系列文
30天快速打造Python資料結構&演算法邏輯刷爆LeetCode30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言